﻿using CanDichVu.Db;
using CanDichVu.Db.Entity;
using CanDichVu.FrameWork.Conrtron;
using CanDichVu.FrameWork.Helper;
using CanDichVu.FrameWork.Member;
using CanDichVu.FrameWork.Security;
using CanDichVu.Service.Iservice;
using CanDichVU.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace CanDichVU.Controllers
{
    public class PostController : ContronllerBase
    {
        private readonly MaHoa _mahoas = new MaHoa();
        private readonly ICate _icate;
        private readonly ITinhThanh _ITinhThanh;
        private readonly IQuanHuyen _IQuanHuyen;
        private readonly IPost _IPost;
        private readonly CanDichVu.FrameWork.Helper.HtmlHelper _ihtml = new CanDichVu.FrameWork.Helper.HtmlHelper();
        private readonly HtmlRemoval _ihtmlRemove = new HtmlRemoval();
        private readonly IUser _IUser;
        private readonly UTAuthenticationService Ut = new UTAuthenticationService();

        public PostController(ICate icate, ITinhThanh iTinhThanh, IQuanHuyen iQuanHuyen, IPost iPost, IUser iUser)
        {
            this._icate = icate;
            this._IQuanHuyen = iQuanHuyen;
            this._ITinhThanh = iTinhThanh;
            this._IPost = iPost;
            this._IUser = iUser;
        }

        //
        // GET: /Post/

        public ActionResult Index()
        {
            return View();
        }

        public ActionResult MyToolOnPost(int PostId, int UserId)
        {
            ToolPostModel ml = new ToolPostModel();
            ml.PostId = PostId;

            if (UserId == UtContext.User.Id)
            {
                ml.IsMyPost = true;
            }
            else
            {
                ml.IsMyPost = false;
            }

            return PartialView("_MyToolOnPost", ml);

        }



        public ActionResult ListPostVipOnTop()
        {
            var _listEntity = _IPost.GetListPostVip("", true, true, 100);
            return PartialView("_ListPostVipOnTop", _listEntity);
        }

        [Authorize]
        public ActionResult GetCateHoaDorpList()
        {
            var _listEntity = new List<ListEntityDorpList>();
            _listEntity.Add(new ListEntityDorpList { id = 0, text = "--Chọn chuyên mục--", children = null });
            _listEntity.AddRange(_icate.ListCateAllDorp(0));
            var jsonResult = Json(_listEntity, JsonRequestBehavior.AllowGet);
            jsonResult.MaxJsonLength = int.MaxValue;
            return jsonResult;
        }

        [Authorize]
        public ActionResult GetCateTTDorpList()
        {
            var _listEntity = new List<ListEntityDorpList>();
            _listEntity.Add(new ListEntityDorpList { id = 0, text = "--Chọn tỉnh/thành--", children = null });
            _listEntity.AddRange(_ITinhThanh.ListCateAllDorp());
            var jsonResult = Json(_listEntity, JsonRequestBehavior.AllowGet);
            jsonResult.MaxJsonLength = int.MaxValue;
            return jsonResult;
        }

        [Authorize]
        public ActionResult GetCateQHDorpList(int tinhthanhiD)
        {
            var _listEntity = new List<ListEntityDorpList>();
            _listEntity.Add(new ListEntityDorpList { id = 0, text = "--Chọn quận/huyện--", children = null });
            _listEntity.AddRange(_IQuanHuyen.ListCateAllDorp(tinhthanhiD));
            var jsonResult = Json(_listEntity, JsonRequestBehavior.AllowGet);
            jsonResult.MaxJsonLength = int.MaxValue;
            return jsonResult;
        }

        [Authorize]
        public ActionResult PostNews()
        {
            Post model = new Post();
            model.TinhThanh = 0;
            model.Quanhuyen = 0;
            model.chuyenmuc = 0;
            return View(model);
        }

        public ActionResult PostEdit(int id)
        {
            try
            {

                Post model = _IPost.GetById(id);

               ViewBag.TextId = _mahoas.MoaHoa_Md5(model.Id.ToString(), "tan.manh.1990", true);

                if (model.UserId != UtContext.User.Id)
                {
                    Session.RemoveAll();
                    Ut.LogOut();
                    UtContext.LogOut();
                    return Redirect("/dang-nhap-thanh-vien");
                }

                return View(model);
            }
            catch {
                Post model = null;
                return View(model);
            }
        }

        [Authorize]
        [HttpPost]
        [ValidateInput(false)]
        public ActionResult PostEdit(Post model, string CaptchaValue, string InvisibleCaptchaValue)
        {
            string texyReqest = Request["Text_Id_MaHoa"];

            if (string.IsNullOrEmpty(texyReqest))
            {
                return JsonSuccess("Vui lòng tải lại trang web, chúng tôi nhận ra một số hoạt động bất bình thường từ bạn");
            }

            string TextId = "";

            try
            {

                TextId = _mahoas.GiaiMa_Md5(texyReqest, "tan.manh.1990", true);
            }
            catch { return JsonSuccess("Vui lòng tải lại trang web, chúng tôi nhận ra một số hoạt động bất bình thường từ bạn"); }

            if (UtContext.User == null)
            {
                return JsonSuccess("" + "," + "dang-nhap-thanh-vien");
            }

            if (model.chuyenmuc.Value == 0)
            {
                return JsonError("Vui lòng chuyên mục cần đăng tin rao vặt ...");
            }

            if (string.IsNullOrEmpty(model.Title))
            {
                return JsonError("Vui lòng nhập tiêu đề đăng tin ...");
            }

            if (string.IsNullOrEmpty(model.HinhThuc))
            {
                return JsonError("Vui lòng nhập thông tin hình thức ...");
            }

            if (string.IsNullOrEmpty(model.TinhTrang))
            {
                return JsonError("Vui lòng nhập tình trạng sản phẩm ...");
            }

            if (string.IsNullOrEmpty(model.AnhDaiDien))
            {
                model.AnhDaiDien = "/Content/images/Noimages.png";
                //return JsonError("Vui lòng chọn một ảnh đại diện cho dịch vụ đăng tin của bạn ...");
            }

            if (string.IsNullOrEmpty(model.Noidung))
            {
                return JsonError("Vui lòng nhập nội dung đăng tin ...");
            }

            if (model.TinhThanh.Value == 0)
            {
                return JsonError("Vui lòng chọn khu vực tỉnh/thành đăng tin ...");
            }

            bool cv = CaptchaController.IsValidCaptchaValue(CaptchaValue.ToUpper());
            bool icv = InvisibleCaptchaValue == "";

            if (!cv || !icv)
            {
                return JsonError("mã xác nhận không đúng, vui lòng nhập lại");
            }

            //Post entity = new Post();
            //model.Id = 0;
            //model.LuotLike = 0;
            //model.LuotView = 0;
            model.Id = int.Parse(TextId);
            model.DescriptPoup = _ihtml.Cutstr(_ihtmlRemove.StripTagsRegexCompiled(model.Noidung), 450);
            model.NameSearch = _ihtml.RemoveSign4VietnameseStringSearch(model.Title);
            //model.tinnhanvip = false;
            model.Meta_Des = model.Des_on_Maps == null ? model.Title : model.Des_on_Maps;
            model.Meta_Title = model.Title;
            model.Meta_KeyWork = model.Title;
            //model.NgayDang = DateTime.Now;
            //model.NgayHetHan = DateTime.Now;
            //model.NgayNhantinVip = DateTime.Now;
            model.NgaySua = DateTime.Now;
            model.UserId = UtContext.User.Id;
            //model.Maso = DateTime.Now.Day + "-" + DateTime.Now.Month + "-" + DateTime.Now.Year + DateTime.Now.Hour + "-" + DateTime.Now.Minute + "-" + DateTime.Now.Millisecond;
            //model.Trang_thai_tin = 1;

            int id = _IPost.addorUpdate(model);

            return JsonSuccess("/rao-vat/" + id.ToString() + "," + _ihtml.RemoveSign4VietnameseString(model.Title));
            //return Json("");
        }


        [Authorize]
        [HttpPost]
        [ValidateInput(false)]
        public ActionResult AddPost(Post model, string CaptchaValue, string InvisibleCaptchaValue)
        {

            if (UtContext.User == null)
            {
                return JsonSuccess("" + "," + "dang-nhap-thanh-vien"); 
            }

            if (model.chuyenmuc.Value == 0)
            {
                return JsonError("Vui lòng chuyên mục cần đăng tin rao vặt ...");
            }

            if (string.IsNullOrEmpty(model.Title))
            {
                return JsonError("Vui lòng nhập tiêu đề đăng tin ...");
            }

            if (string.IsNullOrEmpty(model.HinhThuc))
            {
                return JsonError("Vui lòng nhập thông tin hình thức ...");
            }

            if (string.IsNullOrEmpty(model.TinhTrang))
            {
                return JsonError("Vui lòng nhập tình trạng sản phẩm ...");
            }

            if (string.IsNullOrEmpty(model.AnhDaiDien))
            {
                model.AnhDaiDien = "/Content/images/Noimages.png";
                //return JsonError("Vui lòng chọn một ảnh đại diện cho dịch vụ đăng tin của bạn ...");
            }

            if (string.IsNullOrEmpty(model.Noidung))
            {
                return JsonError("Vui lòng nhập nội dung đăng tin ...");
            }

            if (model.TinhThanh.Value == 0)
            {
                return JsonError("Vui lòng chọn khu vực tỉnh/thành đăng tin ...");
            }

            bool cv = CaptchaController.IsValidCaptchaValue(CaptchaValue.ToUpper());
            bool icv = InvisibleCaptchaValue == "";

            if (!cv || !icv)
            {
                return JsonError("mã xác nhận không đúng, vui lòng nhập lại");
            }

            //Post entity = new Post();
            model.Id = 0;
            model.LuotLike = 0;
            model.LuotView = 0;
            model.DescriptPoup = _ihtml.Cutstr(_ihtmlRemove.StripTagsRegexCompiled(model.Noidung), 450);
            model.NameSearch = _ihtml.RemoveSign4VietnameseStringSearch(model.Title);
            model.tinnhanvip = false;
            model.Meta_Des = model.Des_on_Maps == null ? model.Title : model.Des_on_Maps;
            model.Meta_Title = model.Title;
            model.Meta_KeyWork = model.Title;
            model.NgayDang = DateTime.Now;
            model.NgayHetHan = DateTime.Now;
            model.NgayNhantinVip = DateTime.Now;
            model.NgaySua = DateTime.Now;
            model.UserId = UtContext.User.Id;
            model.Maso = DateTime.Now.Day + "-" + DateTime.Now.Month + "-" + DateTime.Now.Year + DateTime.Now.Hour + "-" + DateTime.Now.Minute + "-" + DateTime.Now.Millisecond;
            model.Trang_thai_tin = 1;

            int id = _IPost.addorUpdate(model);

            return JsonSuccess( "/rao-vat/" + id.ToString() + "," + _ihtml.RemoveSign4VietnameseString(model.Title));
        }

        [HttpGet]
        public ActionResult PostDetails(int id, string name)
        {
            Post entity = new Post();
            try
            {
                entity = _IPost.GetById(id);
            }
            catch
            {
                entity = null;
            }
            
            return View(entity);
        }

        [Authorize]
        [HttpPost]
        public ActionResult UploadImagePost(string qqfile)
        {
            string basePath = "~/Content/uploads/" + DateTime.Now.ToShortDateString();
            string[] fileNameArray = qqfile.Split(new char[] { '.' });
            if (fileNameArray.Length == 1)
            {
                return JsonError("lỗi");
            }

            string fileNameTemp  = "";

            int ytemp = fileNameArray.Length - 1;

            int i = 0;

            while (ytemp > 0)
            {
                fileNameTemp += _ihtml.RemoveSign4VietnameseString(fileNameArray[i]) + "-";
                i++;
                ytemp--;
            }


            FileHelper fileHelper = new FileHelper(basePath);
            string fileName = fileHelper.SaveFile(null, fileNameArray[fileNameArray.Length - 1], Request.InputStream, fileNameTemp);
            string filePathStr = Url.Content(basePath) + @"/" + fileName;
            return Json(new { success = true, filePath = Url.Content(basePath) + @"/" + fileName });
        }

        [Authorize]
        [HttpPost]
        public ActionResult DeleteFilePost(string url)
        {
            try
            {
                ImagesHelpers fileHelper = new ImagesHelpers();
                fileHelper.DeleteFile(url);
                return Json(true);
            }
            catch { return Json(false); }

        }

        [Authorize]
        [HttpPost]
        public ActionResult DeleteFilePostOnThanhVienCurrent(string url)
        {
            try
            {

                if (url == "/Content/images/Default_avatar.gif")
                {
                    return Json(new { success = true, filePath = "/Content/images/Default_avatar.gif" });
                }

                ImagesHelpers fileHelper = new ImagesHelpers();
                fileHelper.DeleteFile(url);

                ThanhVien user_ub = _IUser.GetByUserById(UtContext.User.Id);
                user_ub.HinhAnh = "/Content/images/Default_avatar.gif";
                _IUser.addOrupdate(user_ub);

                return Json(new { success = true, filePath = "/Content/images/Default_avatar.gif" });
            }
            catch { return Json(new { success = false, filePath = "/Content/images/Default_avatar.gif" }); }

        }

        public ActionResult ListPostOnCateProvince(int tinhthanhId, int take, int skip)
        {
            if (skip == 0) skip = 1;
            var listPost = _IPost.GetListOnTinhThanh(tinhthanhId, false, true, take, skip);
            return PartialView("_ListPostOnCateProvince", listPost);
        }

        public ActionResult ListPostOnCateQuanHuyen(int quanhuyenId, int take, int skip)
        {
            if (skip == 0) skip = 1;
            var listPost = _IPost.GetListOnQuanHuyen(quanhuyenId, false, true, take, skip);
            return PartialView("_ListPostOnCateQuanHuyen", listPost);
        }

        public ActionResult ListPostOnCateHomePage(int cate, int take)
        {
            var listPost = _IPost.getListByChuyenMuc(cate, take);
            ViewBag.cateId = cate;
            return PartialView("_ListPostOnCateHomePage", listPost);
        }
    }
}
